/**
 * 数组的map方法实现
 * new Array(5).map(item=>return 2)
 * 返回的结果是empty*5，而不是[2,2,2,2,2]
 * 因为此时array里面的值没有初始化，map不会遍历
 * 
 */
// 遍历的过程中判断当前是否是empty，是的话就不执行fn
// 其实就是用key in array 的操作判断当前是否为empty.key都没有，当然是empty了
// 初始化一个即将返回的新数组用 new Array(this.length);
Array.prototype.myMap = function (fn, thisArg) {
  // this就是数组
  // 判断数组
  if (this === null || this === undefined) {
    throw new TypeError("Cannot read property 'map' of null or undefined")
  }
  // 判断fn
  if (Array.prototype.toString.call(fn) != "[object Function]") {
    throw new TypeError(callbackfn + ' is not a function')
  }
  // 先转换对象
  let obj = Object(this)
  let len = obj.length

  // 创建的新对象，最后返回
  let result = new Array(len)

  for (let k = 0; k < len; ++k) {
    if (k in obj) {
      let kValue = obj[k]//当前值
      let mappedValue = fn.call(thisArg, kValue, k, obj)
      result[k] = mappedValue
    }
  }
  return result
}


const temp = [1,2,3]
const array = temp.myMap((item) => {
  return item = {
    name: '1'
  }
});
console.log(array);


